<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
 
    <script src="./lodash.min.js"></script>
    <script>
        let arr1 = [
            { name: '张三' },
            { name: '李四' },
        ];

        const arr2 = _.cloneDeep(arr1);

        let obj1 = {
            age: {
                num: 20
            }
        }

        // 深拷贝方法二：封装递归函数
        // function deepClone(data) {
        //     if (Array.isArray(data)) {
        //         let newArr = [];
        //         for (let value of data) {
        //             newArr.push(deepClone(value))
        //         }
        //         return newArr;
        //     } else if (typeof data === 'object') {
        //         let newObj = {};
        //         for (let key in data) {
        //             newObj[key] = deepClone(data[key]);
        //         }
        //         return newObj;
        //     }
        //     return data;
        // }

        // const arr2 = deepClone(arr1);
        // const obj2 = deepClone(obj1);



        // obj1.age.num++;

        // console.log(obj1);
        // console.log(obj2);

        // 深拷贝方法一：JSON对象：JSON序列化
        // 把数组arr1转换成JSON格式的字符串
        // let str = JSON.stringify(arr1);
        // let arr2 = JSON.parse(str);

        arr1.push({ name: '王五' });
        arr1[0].age = 20;

        console.log(arr1);
        console.log(arr2);






        // JSON.parse();

        // let arr2 = [].concat(arr1);

        // arr1[0].age = 20;

        // console.log(arr2);


        // 浅拷贝：引用类型在拷贝完成后，只要有任意一层数据的引用地址没有替换，都属于浅拷贝；
        // 深拷贝：引用类型在拷贝完成后，每一层数据的引用地址都被替换了，就属于深拷贝；
    </script>
</body>

</html>